package LeetCode热题HOT100;

import java.util.ArrayList;
import java.util.List;

public class p73矩阵置零 {
    public void setZeroes(int[][] matrix) {
        //暴力解法 空间复杂度O(m+n)
        //利用两个list分别记录 0所在的行列
        List<Integer> hang0=new ArrayList<>();
        List<Integer> lie0=new ArrayList<>();

        for (int i = 0; i <matrix.length ; i++) {
            for (int j = 0; j <matrix[0].length ; j++) {
                if (matrix[i][j]==0) {
                    hang0.add(i);
                    lie0.add(j);
                }
            }
        }

        for(int hang:hang0) {
            //把0所在的行，都置为0
            for (int i = 0; i <matrix[0].length; i++) {
                matrix[hang][i]=0;
            }
        }

        for(int lie:lie0) {
            //把0所在的列，都置为0
            for (int i = 0; i <matrix.length; i++) {
                matrix[i][lie]=0;
            }
        }
    }


    public void setZeroes1(int[][] matrix) {
        //暴力解法 空间复杂度O(m*n)
        int row=matrix.length;
        int column=matrix[0].length;
        int[][] matrixCopy=new int[row][column];
        for (int i = 0; i <row ; i++) {
            for (int j = 0; j <column; j++) {
                matrixCopy[i][j]=matrix[i][j];
            }
        }

        for (int i = 0; i <row ; i++) {
            for (int j = 0; j <column; j++) {
                if (matrixCopy[i][j]==0) {
                    turnZore(matrix,i,j);
                }
            }
        }
    }

    private void turnZore(int[][] matrix, int hang, int lie) {
        //将所在行 置为0
        for (int i =0 ; i <matrix[0].length; i++) {
            matrix[hang][i]=0;
        }
        //将所在列 置为0
        for (int i = 0; i <matrix.length; i++) {
            matrix[i][lie]=0;
        }
    }
}
